package util;

import org.apache.ibatis.exceptions.PersistenceException;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionFactoryUtil {
    // 定义常量
    private static final String MYBATIS_CONFIG_FILE = "mybatis-config.xml";
    private static final SqlSessionFactory FACTORY;

    static {
        // 先定义一个输入流
        InputStream stream = null;
        try {
            // 加载主配置文件
            stream = Resources.getResourceAsStream(MYBATIS_CONFIG_FILE);
            // 创建 SqlSessionFactory 对象
            FACTORY = new SqlSessionFactoryBuilder().build(stream);
        } catch (IOException e) {
            e.printStackTrace();
            throw new PersistenceException("创建 mybatis 工厂失败！");
        }
    }

    // 返回一个工厂对象
    public static SqlSessionFactory getFactory() {
        return FACTORY;
    }

    public static SqlSession getSession() {
        // 参数 true 表示是自动提交的，然后使用 sqlSession 就不再需要调用 commit 方法了
        return FACTORY.openSession(true);
    }

    public static SqlSession getSession(boolean autoCommit) {
        // 如果是 boolean，就默认为 false
        // false 是事务处理方式，关闭自动提交，true 是主动提交，在增删改的时候不在 commit
        return FACTORY.openSession(autoCommit);
    }
}
